package com.doitedu.day05.high_leve

/**
 * @Date 22.6.25
 * @Created by HANGGE
 * @Description
 * 高阶方法
 */
object Demo01 {
  /**
   * 普通方法  处理数据  处理逻辑[固定]  返回结果
   *  1 方法的参数中  有函数
   * @param x
   * @param y
   * @return
   */
  def operator(x:Int, y:Double , f:Int=>Int)={
    f(x) * y
  }

  def operator2(x:Int, y:Int , f:(Int,Int)=>Int)={
    // 函数的逻辑  决定数据的处理逻辑
    f(x,y)
  }


 // 方法的返回值是函数
  def operator3(str1: String): String => String = {
    // 函数 String=>String
     (x: String) => str1 +":"+  x
  }

  def concat(str1: String , name:String)={
    str1 +":"+  name
  }

  def main(args: Array[String]): Unit = {
/*    println(operator(2, 3.0 , _*10))
    println(operator2(2, 5, _ + _))*/

    val f = operator3("hello")
    val str1 = f("tom")
    val str2 = f("jim")
    val str3 = f("cat")
    val str4 = f("rose")
    val str5 = f("jack")
    println(str1)
    println(str2)
    println(str3)
    println(str4)
    println(str5)
    println(concat("hello", "jim"))
    println(concat("hello", "tom"))
    println(concat("hello", "jack"))
    println(concat("hello", "rose"))
    println(concat("hello", "cat"))
    // 柯里化的方法
    // 调用一个方法  再调用一个匿名函数
    operator3("hello")("tom")
  }
}
